package tt.dz.egobus.servicemanager.core.task;

import org.quartz.JobDataMap;

import java.util.Date;

/**
 * @author Anson
 * @date 17-8-4
 * @name 动态任务管理器
 * @since 1.0.6
 */
public interface DynamicTaskManager {

    /**
     * @param task 一个task的任务信息
     * @author Anson
     * @date 17-8-4
     * @name 添加一个定时任务
     * @since 1.0.6
     */
    void addJob(DynamicTask task);

    /**
     * @param jobName          任务名
     * @param jobGroupName     任务组名
     * @param triggerName      触发器名
     * @param triggerGroupName 触发器组名
     * @param jobClass         任务
     * @param startTime        时间设置，参考quartz说明文档
     * @param newJobDataMap    传入的参数
     * @author Anson
     * @date 17-8-4
     * @name 添加一个定时任务
     * @since 1.0.6
     */
    void addJob(String jobName, String jobGroupName,
                String triggerName, String triggerGroupName, Class jobClass,
                Date startTime, JobDataMap newJobDataMap);


    /**
     * @param jobName
     * @param triggerName
     * @param triggerGroupName
     * @param jobGroupName
     * @param startTime
     * @author Anson
     * @date 17-8-4
     * @name 修改一个任务的触发时间(使用默认的任务组名，触发器名，触发器组名)
     * @since 1.0.6
     */
    void modifyJobTime(String jobName, String jobGroupName, String triggerName,
                       String triggerGroupName, Date startTime);


    /**
     * @param jobName
     * @param jobGroupName
     * @param triggerName
     * @param triggerGroupName
     * @author Anson
     * @date 17-8-4
     * @name 移除一个任务
     * @since 1.0.6
     */
    void removeJob(String jobName, String jobGroupName, String triggerName, String triggerGroupName);

    /**
     * @param taskNamespace 当前动态任务的命名空间
     * @author Anson
     * @date 17-8-15
     * @name 删除某个任务
     * @since 1.0.6
     */
    void removeJob(DynamicTaskNamespace taskNamespace);

    /**
     * @author Anson
     * @date 17-8-4
     * @name 启动所有定时任务
     * @since 1.0.6
     */
    void startJobs();


    /**
     * @author Anson
     * @date 17-8-4
     * @name 关闭所有定时任务
     * @since 1.0.6
     */
    void shutdownJobs();


}
